package com.ftg.learn.chpater01.chpater02;

/**
 * 位运算
 *
 * @author lijiaxin
 * @version 1.0
 * @date 2023/4/15 9:21
 */

public class LearnOptions03 {

    public static void main(String[] args) {
//        正整数   有符号与无符号右移是相同
        System.out.println(3>>>1);
        System.out.println(3>>1);


//        补码：符号位不变数值按位取反 末位加1

//        负数
//         -3  10000011     源码
//             11111101     补码
//             11111110     右移一位
//             10000010     右移一位后的补码转换为源码
        System.out.println(-3>>1);

//        -5>>2
//        10000101 >>2  10000010
        System.out.println(-5 >> 2);

        //无符号的负数右移
        System.out.println(-3>>>1);
//        10000011  源码
//        11111101  补码
//        01111110  >>>1
//        01111110  正数转源码不变   2 31次方 -1

        System.out.println(2 & 3);
//        10
//     &  11
//        1 0  相同的1  不同的0
//     |  相同位数有一个为1，则为1
//     ^  相同位数不相同为1，相同为0
//     ~  取反
        System.out.println(18 & 27);
        System.out.println(~2);

//        && 短逻辑与 一假为假
//        & 非短逻辑与 一假为假
//        | 短逻辑或 一真为真
        int a=9;
        System.out.println(a++ >13&&a++>4);
        System.out.println(a);
        System.out.println(a++ >13&a++>4);
        System.out.println(a);

        System.out.println(Integer.valueOf("1"+1+1)-Integer.valueOf("1"+1));
    }

}
